#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-5;
const int inf = (1 << 31) - 1;
const int hinf = 1000000000;
const int mod = 1000000007;
int dat[500][500];
int dp[305][305][305];
int dp2[305][305][305];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) scanf("%d", &dat[i][j]);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++) dp[i][j][k] = dp2[i][j][k] = -hinf;
  dp[1][1][1] = dat[1][1];
  for (int i = 1; i < n; i++) {
    for (int j = 1; j <= i; j++) {
      for (int k = 1; k <= i; k++) {
        if (dp[i][j][k] > -hinf) {
          for (int p = 0; p < 2; p++) {
            for (int q = 0; q < 2; q++) {
              if (j + p <= i + 1 && k + q <= i + 1) {
                if (j + p == k + q) {
                  dp[i + 1][j + p][k + q] =
                      max(dp[i + 1][j + p][k + q],
                          dp[i][j][k] + dat[j + p][i + 2 - (j + p)]);
                } else {
                  dp[i + 1][j + p][k + q] =
                      max(dp[i + 1][j + p][k + q],
                          dp[i][j][k] + dat[j + p][i + 2 - (j + p)] +
                              dat[k + q][i + 2 - (k + q)]);
                }
              }
            }
          }
        }
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n - i + 1; j++) {
      swap(dat[i][j], dat[n - i + 1][n - j + 1]);
    }
  }
  for (int i = 1; i <= n / 2; i++) swap(dat[i][n + 1 - i], dat[n + 1 - i][i]);
  dp2[1][1][1] = dat[1][1];
  for (int i = 1; i < n; i++) {
    for (int j = 1; j <= i; j++) {
      for (int k = 1; k <= i; k++) {
        if (dp2[i][j][k] > -hinf) {
          for (int p = 0; p < 2; p++) {
            for (int q = 0; q < 2; q++) {
              if (j + p <= i + 1 && k + q <= i + 1) {
                if (j + p == k + q) {
                  dp2[i + 1][j + p][k + q] =
                      max(dp2[i + 1][j + p][k + q],
                          dp2[i][j][k] + dat[j + p][i + 2 - (j + p)]);
                } else {
                  dp2[i + 1][j + p][k + q] =
                      max(dp2[i + 1][j + p][k + q],
                          dp2[i][j][k] + dat[j + p][i + 2 - (j + p)] +
                              dat[k + q][i + 2 - (k + q)]);
                }
              }
            }
          }
        }
      }
    }
  }
  int ans = -hinf;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++) {
      if (i == j) {
        ans = max(ans, dp[n][i][j] + dp2[n][n + 1 - i][n + 1 - j] -
                           dat[n + 1 - i][i]);
      } else {
        ans = max(ans, dp[n][i][j] + dp2[n][n + 1 - i][n + 1 - j] -
                           dat[n + 1 - i][i] - dat[n + 1 - j][j]);
      }
    }
  }
  printf("%d\n", ans);
}
