/*控制i,枚举所有的子矩阵。将每一个字矩阵的列全都累加到最上端,然后将子矩阵的最上端当做一维的最大子段和。
只需求出所有子矩阵的最大和即可。*/
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int a[101][101];
int maxsum(int n,int *a)
{
int sum=-129,b=0;
for(int i=0; i<n; i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
}
int maxsum1(int n)
{
int ans=-100000000;
int sum;
int b[101];
for(int i=0; i<n; i++)
{
memset(b,0,sizeof(b));
for(int j=i; j<n; j++)
{
for(int k=0; k<n; k++)
{
b[k]+=a[j][k];//放到最上端,按列进行储存
}
sum=maxsum(n,b);
if(sum>ans) ans=sum;
}
}
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("%d\n",maxsum1(n));
}
return 0;
}