#include <climits>
#include <iostream>
#include <cstring>

using namespace std;

/*

暴力解:
枚举每个左上角(a,b)于右下角(c,d)
用前缀和,时间复杂度:O(n^4) 10^8

sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]

子矩阵abcd的和:
ans = sum[c][d]-sum[a-1][d]-sum[c][b-1]+sum[a-1][b-1]

const int N = 110;
int arr[N][N];
int sum[N][N];

int main() {
    int n;
    cin >> n;
    memset(arr, 0, sizeof(arr));
    memset(sum, 0, sizeof(sum));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> arr[i][j];
        }
    }
    //计算前缀和
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + arr[i][j];
        }
    }
    //计算最大子矩阵和
    int ans = INT_MIN;
    for (int a = 1; a <= n; a++) {
        for (int b = 1; b <= n; b++) {
            for (int c = a; c <= n; c++) {
                for (int d = b; d <= n; d++) {
                    ans = max(ans, sum[c][d] - sum[a - 1][d] - sum[c][b - 1] + sum[a - 1][b - 1]);
                }
            }
        }
    }
    cout << ans << endl;


    return 0;
}*/




/*最优解:
枚举i行,j行来确定最大子矩阵所在的行范围
而对于列来说,把一列看成一个元素,用动态规划解决最大子序列和

时间复杂度:O(n^3) 10^6

前缀和:sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+arr[i][j]

子矩阵abcd的和:
ans = sum[c][d]-sum[a-1][d]-sum[c][b-1]+sum[a-1][b-1]
*/
const int N = 110;
int arr[N][N];
int sum[N][N];

int dp[N];

int main() {
    int n;
    cin >> n;
    memset(arr, 0, sizeof(arr));
    memset(sum, 0, sizeof(sum));
    memset(dp,0,sizeof(dp));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> arr[i][j];
        }
    }
    //计算前缀和
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + arr[i][j];
        }
    }
    //计算最大子矩阵和
    int ans = INT_MIN;
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            for(int k=1;k<=n;k++){
                //得到每一列的子矩阵和
                int subM = sum[j][k]-sum[i-1][k]-sum[j][k-1]+sum[i-1][k-1];
                dp[k]=max(dp[k-1]+subM,subM);
                ans=max(ans,dp[k]);
            }
        }
    }
    cout << ans << endl;


    return 0;
}