#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <vector>
#include <algorithm>

#define int64 long long int
using namespace std;

void move(int *, int);
int ans(int num[100][50], int);

int main()
{
	int c, h, w, k;
	int num[100][50]={0};
	char buf[3];
	h=0, w=0, k=0;
	while((c = getchar()) != EOF){
		if('0' <= c && c <= '9'){
			buf[k] = c;
			k++;
		} else if(c == ',') {
			buf[k] = 0;
			num[h][w] = atoi(buf);
			k = 0;
			w++;
		} else {
			buf[k] = 0;
			num[h][w] = atoi(buf);
			k = 0;
			w = 0;
			h++;
		}
	}

	w = (h+1)/2;

	for(int i=w; i<h; i++)
		move(num[i], i-w+1);

	cout << ans(num, h) << '\n';

	return 0;
}

int ans(int num[100][50], int h){

	for(int i=h-1; i>0; i--){
		for(int j=0; j<i; j++){
			num[i-1][j] += max(num[i][j], num[i][j+1]);
		}
	}
	return num[0][0];
}

void move(int *a, int n)
{
	int b[50]={0};
	for(int i=0; i<50-n; i++)
		b[n+i] = a[i];
	for(int i=0; i<50; i++)
		a[i] = b[i];
	return;
}