DP
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
#define MAX 10007
typedef long long ll;
int ans = 0;
//基于DFS
void dfs(int x,int y,int n,int sum,int **a,int **b){
sum = sum + a[x-1][y];
if(x == n){
if(sum > ans)ans = sum;
return;
}
if(sum > b[x][y]){
b[x][y]=sum;
dfs(x+1,y,n,sum,a,b);
}
if(sum > b[x][y+1]){
b[x][y+1]=sum;
dfs(x+1,y+1,n,sum,a,b);
}
}
//基于DP
void dp(int n,int **a,int **b){
b[0][0]=a[0][0];
for(int i=1;i<n;++i)b[i][0] = b[i-1][0]+a[i][0];
for(int i=1;i<n;++i)b[i][i] = b[i-1][i-1] + a[i][i];
for(int i=2;i<n;++i)
for(int j=1;j<i;++j)
b[i][j] = max(b[i-1][j-1],b[i-1][j]) + a[i][j];
for(int i=0;i<n;++i)ans = max(ans,b[n-1][i]);
}
int main(){
int n,**a,**b;
cin>>n;
a = new int*[n];
b = new int*[n];
for(int i=0;i<n;++i){
a[i] = new int[i+1];
b[i] = new int[i+1];
for(int j=0;j<=i;++j){
cin>>a[i][j];
b[i][j]=0;
}
}
dp(n,a,b);
// dfs(1,0,n,0,a,b);
cout<<ans<<endl;
return 0;
}