#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 1000
int mat[1001][1001];
int dp[1001][1001][4];
#define INF 2000000000
int n;
#define FROM_LEFT 0
#define FROM_RIGHT 1
#define FROM_TOP_LEFT 2
#define FROM_TOP_RIGHT 3

ll f(int i, int j, int k){
    if(i<0 || i>=n || j<0 || j>=n) return -INF;
    if(k == FROM_LEFT && j==0 || k == FROM_RIGHT && j==n-1 || i==0 &&(k== FROM_TOP_LEFT || k== FROM_TOP_RIGHT)){
        return dp[i][j][k] = mat[i][j];
    }
    if(k == FROM_LEFT){
        return dp[i][j][k] = max(f(i, j-1, FROM_LEFT), f(i, j-1, FROM_TOP_RIGHT)) + mat[i][j];
    }
    if(k == FROM_RIGHT){
        return dp[i][j][k] = max(f(i, j+1, FROM_RIGHT), f(i, j+1, FROM_TOP_LEFT)) + mat[i][j];
    }
    if(k == FROM_TOP_LEFT){
        return dp[i][j][k] = max(f(i-1, j, FROM_TOP_LEFT), f(i-1, j, FROM_LEFT)) + mat[i][j];
    }
    if(k == FROM_TOP_RIGHT){
        return dp[i][j][k] = max(f(i-1, j, FROM_TOP_RIGHT), f(i-1, j, FROM_RIGHT)) + mat[i][j];
    }

}
int main() {
   // freopen("C:\\in.txt", "r", stdin);
    scanf("%d", &n);
    for(int i=0; i<n; ++i){
        for(int j=0; j<n; ++j){
            scanf("%d", &mat[i][j]);
        }
    }
    for(int i=0; i<n; ++i)
    for(int j=0; j<n; ++j)
    for(int k=0; k<4; ++k)
        dp[i][j][k] = -INF;

    ll res = -INF;
    for(int i=0; i<n; ++i)
    for(int j=0; j<n; ++j)
    for(int k=0; k<4; ++k)
        res = max(res, f(i,j,k));
    cout << res << endl;
    return 0;
}