//
// main.cpp
// poj1050
//
// Created by Haoying Zhao on 17/9/2. 8:51
// Copyright © 2017年 Haoying Zhao. All rights reserved.
//
#include
#include
using namespace std;
int a[101][101];
int t[101];
int main(int argc, const char * argv[]) {
int N;
cin >> N;
memset(t, 0, sizeof(t));
for(int i = 0; i <= N; ++i)
for(int j = 0; j <= N; ++j)
cin >> a[i][j];
int max = INT_MIN;
for(int i = 0; i < N; ++i)
for(int j = i; j < N; ++j) {
for(int m = 0; m < N; ++m)
for(int n = i; n <= j; ++n)
if(n == i)
t[m] = a[n][m];
else t[m] += a[n][m];
int tt[101];
memset(tt, 0, sizeof(tt));
for(int k = 0; k < N; ++k)
if(k == 0) {
tt[k] = t[k];
if(tt[k] > max)
max = tt[k];
}
else if(t[k] > 0) {
tt[k] = tt[k-1] + t[k];
if(tt[k] > max)
max = tt[k];
}
else {
tt[k] = t[k];
if(tt[k] > max)
max = tt[k];
}
}
cout << max;
return 0;
}