#include <bits/stdc++.h>
using namespace std;
int dp[605][305][305];
int a[305][305];
int max(int a, int b) { return a > b ? a : b; }
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    int i, j, k;
    for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
        scanf("%d", &a[i][j]);
      }
    }
    for (i = 0; i <= 2 * n; i++) {
      for (j = 0; j < n; j++) {
        for (k = 0; k < n; k++) {
          dp[i][j][k] = -1000000000;
        }
      }
    }
    dp[0][0][0] = a[0][0];
    for (i = 1; i <= 2 * (n - 1); i++) {
      for (j = 0; j < n && j <= i; j++) {
        if (i - j >= n) continue;
        for (k = 0; k < n && k <= i; k++) {
          if (i - k >= n) continue;
          int y1, y2, s;
          if (j == k && i - j == i - k)
            s = a[j][i - j];
          else
            s = a[j][i - j] + a[k][i - k];
          if (j - 1 >= 0)
            dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j - 1][k] + s);
          if (j - 1 >= 0 && k - 1 >= 0)
            dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j - 1][k - 1] + s);
          if (k - 1 >= 0)
            dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j][k - 1] + s);
          dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j][k] + s);
        }
      }
    }
    printf("%d\n", dp[2 * (n - 1)][n - 1][n - 1]);
  }
  return 0;
}
