#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

struct NUM{
	int num;
	int sc;
};

int main() {

	vector<vector<NUM> > m;	
	while(!cin.eof()){
		string str;
		cin >> str;
		int cnt = count_if(str.begin(),str.end(),[](char c){return c==',';});
		
		vector<NUM> v;
		stringstream  st(str);
		for(int i=0;i<=cnt;i++){
			char c;
			if(i>0) st >> c;
			int n;
			st >> n;
			v.push_back({n,0});
		}
//		cout << v.size() << endl;
		m.push_back(v);
		if( m.size()>1 && v.size()==1)break;
	}

	m[0][0].sc=m[0][0].num;
	for(int i=1;i<m.size();i++){
		for(int x=0;x<m[i].size();x++){
			if( m[i].size()>m[i-1].size() ){
				if( x==0 ){
					m[i][x].sc=m[i][x].num + m[i-1][x].sc;
				}
				else if( x==m[i].size()-1 ){
					m[i][x].sc=m[i][x].num + m[i-1][x-1].sc;
				}else{
					m[i][x].sc=max(
						m[i][x].num + m[i-1][x].sc,
						m[i][x].num + m[i-1][x-1].sc);
				}
			}else{
				m[i][x].sc=max(
					m[i][x].num + m[i-1][x].sc,
					m[i][x].num + m[i-1][x+1].sc);
			}
		}
	}

	cout << m.back().front().sc << endl;

	return 0;
}