#include <bits/stdc++.h>

using namespace std;

#define MAXN 1050
#define INF 1100000000

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

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