#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:536870912")
#pragma warning(disable : 4996)
using namespace std;
const int N = 305;
int dp[N * 2][N][N], ar[N][N];
int n;
pair<int, int> getC(int t, int i) {
  return t <= n - 1 ? make_pair(t - i, i) : make_pair(n - 1 - i, t - n + 1 + i);
}
int getS(int t) { return t <= n - 1 ? t + 1 : (2 * n - 1 - t); }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) scanf("%d", &ar[i][j]);
  }
  memset(dp, 128, sizeof(dp));
  ;
  dp[0][0][0] = ar[0][0];
  for (int i = 0; i < 2 * n - 2; i++) {
    int t = getS(i + 1), c = getS(i);
    for (int a = 0; a < c; a++) {
      for (int b = 0; b < c; b++) {
        for (int p = (i < n - 1 ? 0 : -1); p < (i < n - 1 ? 2 : 1); p++) {
          for (int q = (i < n - 1 ? 0 : -1); q < (i < n - 1 ? 2 : 1); q++) {
            auto g = getC(i + 1, a + p), h = getC(i + 1, b + q);
            if (g.first >= n || g.second >= n || h.first >= n ||
                h.second >= n || g.first < 0 || g.second < 0 || h.first < 0 ||
                h.second < 0)
              continue;
            int sum = dp[i][a][b] + ar[g.first][g.second];
            if (g != h) sum += ar[h.first][h.second];
            dp[i + 1][a + p][b + q] = max(dp[i + 1][a + p][b + q], sum);
          }
        }
      }
    }
  }
  printf("%d", dp[2 * n - 2][0][0]);
  return 0;
}
