#include <bits/stdc++.h>

using namespace std;

#define MAXN 1050
#define INF 1100000000

int N;
int A[MAXN][MAXN];
int dp[MAXN][MAXN][2][2];

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	cin.sync_with_stdio(false);
	
	cin >> N;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cin >> A[i][j];
		}
	}
	
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			for (int k = 0; k < 2; k++) {
				for (int t = 0; t < 2; t++) {
					dp[i][j][k][t] = -INF;
				}
			}
		}
	}
	
	int ans = -INF;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			for (int k = 0; k < 2; k++) {
				for (int t = 0; t < 2; t++) {
					if (dp[i][j][k][0] > -INF || i == 0) {
						dp[i][j][k][0] = max(dp[i][j][k][0], A[i][j]);
					}
				}
			}
		}
		
		// spre dreapta
		for (int j = 0; j < N - 1; j++) {
			for (int t = 0; t < 2; t++) {
				dp[i][j + 1][1][1] = max(dp[i][j + 1][1][1], dp[i][j][1][t] + A[i][j + 1]);
			}
		}
		
		// spre stanga
		for (int j = N - 1; j >= 0; j--) {
			for (int t = 0; t < 2; t++) {
				dp[i][j - 1][0][1] = max(dp[i][j - 1][0][1], dp[i][j][0][t] + A[i][j - 1]);
			}
		}
		
		// in jos
		if (i + 1 < N) {
			for (int j = 0; j < N; j++) {
				for (int k = 0; k < 2; k++) {
					for (int t = 0; t < 2; t++) {
						int nk = t == 1 ? 1 - k : k;
						dp[i + 1][j][nk][0] = max(dp[i + 1][j][nk][0], dp[i][j][k][t] + A[i + 1][j]);
					}
				}
			}
		}
	}
	
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			for (int k = 0; k < 2; k++) {
				for (int t = 0; t < 2; t++) {
					ans = max(ans, dp[i][j][k][t]);
				}
			}
		}
	}
	
	cout << ans << endl;
	
	return 0;
}