import java.util.Scanner;
public class Main{
static int N = 510;
static int[][] a = new int[N][N];
static int[][] dp = new int[N][N];
static int INF = (int)1e7;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 0; i <= n;i++){
for(int j = 0; j<=i + 1; j++){
dp[i][j] = -INF;
}
}
for(int i = 1; i <= n; i++){
for(int j = 1;j <= i;j++){
a[i][j] = sc.nextInt();
}
}
int maxdp = -INF;
dp[1][1] = a[1][1];
for(int i = 2; i <= n; i++){
for(int j = 1; j <= i; j++){
dp[i][j] = Math.max(dp[i - 1][j - 1],dp[i - 1][j]) + a[i][j];
}
}
for(int i = 1; i <= n; i++){
maxdp = Math.max(dp[n][i],maxdp);
}
System.out.println(maxdp);
}
}
import java.util.Scanner;
public class Main{
static int N = 1010;
static int[] dp = new int[N];
static int[] a = new int[N];
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
dp[i] = 1;
}
int ms = 1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i ; j++){
if(a[j] < a[i] ) dp[i] = Math.max(dp[i],dp[j] + 1);
}
ms = Math.max(ms,dp[i]);
}
System.out.println(ms);
}
}
import java.util.Scanner;
public class Main{
static int N = 310;
static int[] a = new int[N];
static int[] s = new int[N];
static int[][] f = new int[N][N];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i <= n; i++){
a[i] = sc.nextInt();
s[i] = s[i - 1] + a[i];
}
for(int len = 2; len <= n; len++){
for(int l = 1; l + len - 1 <= n; l++){
int r = l + len - 1;
f[l][r] = (int)1e8;
for(int k = l; k < r; k++){
f[l][r] = Math.min(f[l][r],f[l][k] + f[k+1][r]+s[r] - s[l - 1]);
}
}
}
System.out.println(f[1][n]);
}
}