
#include<bits/stdc++.h>
using namespace std;
int n,bord[1010][1010];
int b_l[2010],b_r[2010];
int ans = 0;
const pair<int,int> none = make_pair(-1,-1);
pair<int,int> P;
pair<int,int> point(int l,int r) {
pair<int,int> res;
if(((l-r+n-1)%2!=0)||((l+r-n+1)%2!=0)||
(l-r+n-1)/2<0||(l-r+n-1)/2>(n-1)||(l+r-n+1)/2<0||(l+r-n+1)/2>(n-1)) return none;
else return make_pair((l-r+n-1)/2,(l+r-n+1)/2);
}
int cut(int l,int r) {
P = point(l,r);
if(P!=none) return bord[P.second][P.first];
else return 0;
}
int main() {
scanf("%d",&n);
for(int y=0; y<n; y++) {
for(int x=0; x<n; x++) {
cin>>bord[y][x];
b_l[x+y]+=bord[y][x];
b_r[(n-1-x)+y]+=bord[y][x];
}
}
for(int al=0; al<n; al++) {
for(int bl=0; bl<n; bl++) {
if(al==bl) continue;
int now = 0;
int al_2 = 2*(n-1)-al;
int ar = (n-1)-al;
int ar_2 = 2*(n-1)-ar;
now+=b_l[al];
if(al_2!=al) now+=b_l[al_2];
now+=b_r[ar];
if(ar_2!=ar) now+=b_r[ar_2];
if(al_2==al) {
if(ar_2==ar) {
now-=cut(al,ar);
} else {
now-=cut(al,ar);
now-=cut(al,ar_2);
}
} else {
if(ar_2==ar) {
now-=cut(al,ar);
now-=cut(al_2,ar);
} else {
now-=cut(al,ar);
now-=cut(al,ar_2);
now-=cut(al_2,ar);
now-=cut(al_2,ar_2);
}
}
int bl_2 = 2*(n-1)-bl;
int br = (n-1)-bl;
int br_2 = 2*(n-1)-br;
now+=b_l[bl];
if(bl_2!=bl) now+=b_l[bl_2];
now+=b_r[br];
if(br_2!=br) now+=b_r[br_2];
if(bl_2==bl) {
if(br_2==br) {
now-=cut(bl,br);
} else {
now-=cut(bl,br);
now-=cut(bl,br_2);
}
} else {
if(br_2==br) {
now-=cut(bl,br);
now-=cut(bl_2,br);
} else {
now-=cut(bl,br);
now-=cut(bl,br_2);
now-=cut(bl_2,br);
now-=cut(bl_2,br_2);
}
}
if(al==al_2){
if(br==br_2){
now-=cut(al,br);
}else{
now-=cut(al,br);
now-=cut(al,br_2);
}
}else{
if(br==br_2){
now-=cut(al,br);
now-=cut(al_2,br);
}else{
now-=cut(al,br);
now-=cut(al_2,br_2);
now-=cut(al,br);
now-=cut(al_2,br_2);
}
}
if(ar==ar_2){
if(bl==bl_2){
now-=cut(bl,ar);
}else{
now-=cut(bl,ar);
now-=cut(bl_2,ar);
}
}else{
if(bl==bl_2){
now-=cut(bl,ar);
now-=cut(bl,ar_2);
}else{
now-=cut(bl,ar);
now-=cut(bl_2,ar_2);
now-=cut(bl,ar);
now-=cut(bl_2,ar_2);
}
}
ans = max(ans,now);
}
}
printf("%d",ans);
return 0;
}