#include<bits/stdc++.h>
using namespace std;
int n, a[1005][1005], cnt, ans;
priority_queue<pair<int, int> > q;
struct node{
int num;
int x;
int y;
int ans;
}d[1005];
void coint(){
int p1;
for(int i=1;i<=n;i++){
++cnt;
int j=1;
while(i<n && j<n) d[cnt].num+=a[++i][++j], d[cnt].x=i, d[cnt].y=j;
if(i==n && j==n) continue;
while(i>1 && j<n) d[cnt].num+=a[--i][++j], d[cnt].x=i, d[cnt].y=j;
if(i==1 && j==n) continue;
while(i>1 && j>1) d[cnt].num+=a[--i][--j], d[cnt].x=i, d[cnt].y=j;
if(i==1 && j==1) continue;
while(i<n && j>1) d[cnt].num+=a[++i][--j], d[cnt].x=i, d[cnt].y=j;
q.push(make_pair(d[cnt].num, cnt));
cout<<d[cnt].num<<"\n";
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
coint();
int x1=q.top().first;
int y1=q.top().second;
q.pop();
int x2=q.top().first;
int y2=q.top().second;
for(int i=1;i<=d[y1].ans;i++){
ans+=d[y1].num;
for(int j=1;j<=d[y2].ans;j++){
if(d[y1].x!=d[y2].x || d[y1].y!=d[y2].y) ans+=d[y2].num;
}
}
cout<<ans;
return 0;
}