# en partant du bas de la pyramide, on remplit les cases en
# additionnant leur valeurs avec le maximum des valeurs des deux cases
# du dessous
def pyramide(n, numbers):
    for i in xrange(n-2, -1, -1):
        for j in xrange(i+1):
            numbers[i][j] += max(numbers[i+1][j], numbers[i+1][j+1])
    return numbers[0][0]

if __name__ == '__main__':
    n = int(raw_input())

    data = [int(_) for _ in raw_input().split()]
    numbers = []
    # on stocke la pyramide sous forme de liste de listes contenant
    # chacune les adhérences
    for i in xrange(1, n+1):
        numbers.append(data[i*(i-1)/2:i*(i+1)/2])
    print numbers

    print pyramide(n, numbers)