#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;
}