#include<iostream>
#include<cstdio>
#include<climits>
using namespace std;
const int MAXN =100;
int martix[MAXN][MAXN];
int total[MAXN][MAXN];//辅助矩阵记录每列和
int arr[MAXN];//等价一维数组
int dp[MAXN];//计算大小数组
int MaxSubsequence(int n){
    int maximum=INT_MIN;//防止负数情形
    for(int i=0;i<n;i++){
        if(i==0){
            dp[i] =arr[i];
        }else{
            dp[i]=max(arr[i],arr[i]+dp[i-1]);
        }
        maximum=max(maximum,dp[i]);
    }
    return maximum;
}
int MaxSubmartix(int n){
    int maximum=INT_MIN;
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            for(int k=0;k<n;k++){
                if(i==0){
                    arr[k]=total[j][k];
                }else{
                    arr[k]=total[j][k]-total[i-1][k];
                }
            }
            int current =MaxSubsequence(n);
            maximum = max(maximum,current);
        }
    }
    return maximum;
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            int temp=0;
            scanf("%d",&martix[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i==0){
                total[i][j]=martix[i][j];
            }else{
                total[i][j] =total[i-1][j]+martix[i][j];
            }
        }
    }
    cout<<MaxSubmartix(n)<<endl;
    return 0;
}