/**
* 题意:不难理解吧。。从顶到底,找出一条路径,是的sum最大。
*
* 动态规划入门吧,记忆化搜索。
* 自底向上dp。
* 用滚动数组,也就是一维数组记录即可
* 最后输出dp[1]就行
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <algorithm>
#define INF 0x7fffffff
#define MAXS none
#define LL long long
using namespace std;
int num[101][101], dp[101], ans;
void dpf(int r) {
for(int i = r; i >= 1; i --)
for(int j = 1; j <= i; j ++)
dp[j] = dp[j] > dp[j + 1] ? dp[j] + num[i][j] : dp[j + 1] + num[i][j];
}
int main()
{
int r;
while(scanf("%d", &r) != EOF) {
ans = 0;
for(int i = 1; i <= r; i ++)
for(int j = 1; j <= i; j ++)
scanf("%d", &num[i][j]);
memset(num[r + 1], 0, sizeof(num[r + 1]));
dpf(r);
printf("%d\n", dp[1]);
}
return 0;
}