import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] matrix = new int[n][n];
for (int i = 0; i < matrix[0].length; i++) {
for (int j = 0; j < matrix.length; j++) {
matrix[i][j] = in.nextInt();
}
}
System.out.println(finMaxSubMatrix(matrix));
}
public static int finMaxSubMatrix(int[][] matrix) {
int res = Integer.MIN_VALUE;
int[][] dp = new int[matrix.length][matrix[0].length];
dp[0][0] = matrix[0][0];
for (int i = 1; i < matrix[0].length; i++) dp[0][i] = dp[0][i - 1] + matrix[0][i];
for (int j = 1; j < matrix.length; j++) dp[j][0] = dp[j - 1][0] + matrix[j][0];
for (int i = 1; i < matrix[0].length; i++) {
for (int j = 1; j < matrix.length; j++) {
dp[i][j] = matrix[i][j] + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
}
}
//遍历,对于每一个右下角,枚举其左上角
int curMatrix = 0;
for (int i = 0; i < matrix[0].length; i++) {
for (int j = 0; j < matrix.length; j++) {
//右下角i,j
for (int u = 0; u <= i; u++) {
for (int v = 0; v <= j; v++) {
//左上角u,v
int a = dp[i][j];
int b = safeGet(dp, u - 1, v - 1);
int c = safeGet(dp, u - 1, j);
int d = safeGet(dp, i, v - 1);
curMatrix = a + b - c - d;
res = Math.max(curMatrix, res);
}
}
}
}
return res;
}
private static int safeGet(int[][]matrix, int i, int j) {
int res = 0;
try {
res = matrix[i][j];
} catch (Exception e) {}
return res;
}
}