#include<cstdio>
#include<algorithm>
using namespace std;
int mg[1005][1005],l1=0,l2=0,f[1005],a[1005][1005];
int c1,c2,g1,g2,g3,g4,g5,g6,g7,g8;
int x1,y1,x2,y2,x3,y3,x4,y4;
int main()
{
//freopen("pacman.in","r",stdin);
//freopen("pacman.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&mg[i][j]);
}
}
for(int i=1;i<=n;i++)
{
l1+=mg[i][i];
l2+=mg[i][n+1-i];
}
f[1]=l1;
f[n]=l2;
for(int k=2;k<n;k++)//k表示矩形在最左边的边上的点的纵坐标
{
for(int i=1;i<=n;i++)
{
f[k]+=mg[i][k+1-i];//左上边
}
for(int i=1;i<=n+1-k;i++)
{
f[k]+=mg[k-1+i][i];//右上边
}
for(int i=1;i<=k;i++)
{
f[k]+=mg[n-k+i][n+1-i];//右下边
}
for(int i=1;i<=n+1-k;i++)
{
f[k]+=mg[i][k-1+i];//左下边
}
f[k]=f[k]-mg[1][k]-mg[k][1]-mg[n+1-k][n]-mg[n][n+1-k];
}
int maxn=0;
for(int k=1;k<n;k++)
{
for(int c=k+1;c<=n;c++)// k和c表示两个不同矩形矩形在最左边的边上的点的纵坐标
{
int sum=f[k]+f[c];
int t;
if((k+c)%2==0&&(c-k)%2==0)
{
x1=(c-k)/2+1;//对称求重复的点
y1=(k+c)/2;
x2=(k+c)/2;//y1
y2=(c-k)/2+1;//x1
x3=n-(k+c)/2+1;
y3=n-(c-k)/2;
x4=n-(c-k)/2;
y4=n-(k+c)/2+1;
if(k!=1&&c!=n)//矩形
{
if(sum-mg[x1][y1]-mg[x2][y2]-mg[x3][y3]-mg[x4][y4]>maxn)
{
maxn=sum-mg[x1][y1]-mg[x2][y2]-mg[x3][y3]-mg[x4][y4];
}
}
else if(k==1&&c==n)//对角线
{
if(sum-mg[x1][y1]>maxn)
{
maxn=sum-mg[x1][y1];
}
}
else //矩形+对角线
{
if(x1==x2)
{
if(sum-mg[x1][y1]-mg[x3][y3]>maxn)
{
maxn=sum-mg[x1][y1]-mg[x3][y3];
}
}
else
{
if(sum-mg[x2][y2]-mg[x3][y3]>maxn)
{
maxn=sum-mg[x2][y2]-mg[x3][y3];
}
}
}
}
else
{
if(sum>maxn)
{
maxn=sum;
}
}
}
}
printf("%d",maxn);
return 0;
}