/**************************************************************** 
 * Description: 洛谷P1216  数字金字塔
 * Author: Alex Li
 * Date: 2024-01-24 18:27:36
 * LastEditTime: 2024-01-24 18:30:37
****************************************************************/
#include <iostream>
using namespace std;
const int MAXN=1005; // 定义一个常数MAXN，表示数字金字塔的最大行数。

int NT[MAXN][MAXN];  // 使用一个二维数组NT来存储数字金字塔。
int Sum[MAXN][MAXN]; // 使用另一个二维数组Sum来存储到达每个点的最大路径和。
int N;  // N表示数字金字塔的行数。

// 主函数
int main(){
    cin>>N; // 读取数字金字塔的行数。
    // 读取数字金字塔的每个值。
    for (int i = 1; i <= N; i++){
        for (int j = 1; j <= i; j++){
            cin>>NT[i][j];
        }
    }
    // 初始化顶点的最大路径和为顶点本身。
    Sum[1][1] = NT[1][1];

    // 动态规划填表过程
    for (int i = 2; i <= N; i++){
        for (int j = 1; j <= i; j++)
            // 计算到达每个点的最大路径和。
            Sum[i][j] = max(Sum[i-1][j-1], Sum[i-1][j]) + NT[i][j];
    }

    int ans = 0; // 用于存储最大路径和。

    // 在最后一行中找到最大路径和。
    for (int j = 1; j <= N; j++)
         ans = max(ans, Sum[N][j]);

    // 输出最大路径和。
    cout << ans << endl;
    return 0;
}
