#include <bits/stdc++.h>
const int INF = 10000000;
const int maxn = 305;
int map[maxn][maxn];
int dp[maxn * 2][maxn][maxn];
void Max(int &a, int b) {
  if (b > a) a = b;
}
int Gao(int n) {
  int i, j, k;
  memset(dp, 0x8f, sizeof(dp));
  dp[0][1][1] = map[1][1];
  for (i = 1; i < 2 * n - 1; i++) {
    for (j = 1; j <= n && i - j + 2 >= 1; j++) {
      for (k = j; k <= n && i - k + 2 >= 1; k++) {
        int max = -INF;
        Max(max, dp[i - 1][j][k]);
        Max(max, dp[i - 1][j - 1][k]);
        Max(max, dp[i - 1][j][k - 1]);
        Max(max, dp[i - 1][j - 1][k - 1]);
        max = max + map[j][i - j + 2] + map[k][i - k + 2];
        if (k == j) max = max - map[j][i - j + 2];
        dp[i][j][k] = max;
      }
    }
  }
  return dp[2 * n - 2][n][n];
}
int main() {
  int n;
  int i, j;
  while (scanf("%d", &n) != EOF) {
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++) scanf("%d", &map[i][j]);
    printf("%d\n", Gao(n));
  }
  return 0;
}
