#include <bits/stdc++.h>
using namespace std;
int f[610][310][310];
int min1(int x, int y) {
  if (x < y) return x;
  return y;
}
int max1(int x, int y) {
  if (x > y) return x;
  return y;
}
int main() {
  int n, i, j, a[310][310], o, k;
  while (~scanf("%d", &n)) {
    memset(a, 0, sizeof(a));
    memset(f, 129, sizeof(f));
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= n; j++) {
        scanf("%d", &a[i][j]);
      }
    }
    f[2][1][1] = a[1][1];
    f[1][1][1] = 0;
    for (k = 2; k < n * 2; k++) {
      for (i = max1(1, k - n); i <= min1(k - 1, n); i++) {
        for (j = max1(i, k - n); j <= min1(k - 1, n); j++) {
          o = -99999999;
          if (k - j > 1 && k - i > 1) {
            if (o < f[k - 1][i][j]) o = f[k - 1][i][j];
          }
          if (j - 1 > 0 && k - i > 1) {
            if (o < f[k - 1][i][j - 1]) o = f[k - 1][i][j - 1];
          }
          if (i - 1 > 0 && k - j > 1) {
            if (o < f[k - 1][i - 1][j]) o = f[k - 1][i - 1][j];
          }
          if (j - 1 > 0 && i - 1 > 0) {
            if (o < f[k - 1][i - 1][j - 1]) o = f[k - 1][i - 1][j - 1];
          }
          if (o != -99999999) {
            f[k][i][j] = o + a[k - i][i] + a[k - j][j];
            if (i == j) f[k][i][j] -= a[k - i][i];
          }
        }
      }
    }
    o = f[n * 2 - 1][n - 1][n - 1];
    if (o < f[n * 2 - 1][n - 1][n]) o = f[n * 2 - 1][n - 1][n];
    if (o < f[n * 2 - 1][n][n]) o = f[n * 2 - 1][n][n];
    printf("%d\n", o + a[n][n]);
  }
  return 0;
}
