#include <iostream>
#include <malloc.h>
using namespace std;
int *array1;
int countnum(int row)
{
int sum=0;
for(int i=0;i<row;i++)
{
sum+=i+1;
}
return sum;
}
int initarray(int *i, int num)
{
int m;
for(int j=0;j<num;j++)
{
cin>>m;
*(i+j)=m;
}
return 0;
}
int intmax(int x, int y)
{
return x>y?x:y;
}
int getmaxsum(int *i, int rows, int row, int col)
{
if(rows==1)
{
*(array1+countnum(row-1)+col)=*(i+countnum(row-1)+col);
return *(i+countnum(row-1)+col);
}
else
{
int d,dr;
if(*(array1+countnum(row)+col)!=10000)
d=*(array1+countnum(row)+col);
else
{
d=getmaxsum(i,rows-1,row+1,col);
*(array1+countnum(row)+col)=d;
}
if(*(array1+countnum(row)+col+1)!=10000)
dr=*(array1+countnum(row)+col+1);
else
{
dr=getmaxsum(i,rows-1,row+1,col+1);
*(array1+countnum(row)+col+1)=dr;
}
return *(i+countnum(row-1)+col)+intmax(d,dr);
}
}
int main(int argc, char* argv[])
{
int num;
int *array;
cin>>num;
array=(int *)malloc(sizeof(int)*countnum(num));
array1=(int *)malloc(sizeof(int)*countnum(num));
for(int i=0;i<countnum(num);i++)
{
*(array1+i)=10000;
}
initarray(array,countnum(num));
cout<<getmaxsum(array,num,1,0)<<endl;
return 0;
}