//"بسم الله الرحمن الرحيم"                         

							//"وأما من امن وعمل صالحا فله جزاء الحسنى وسنقول له من امرنا يسرا"

													 //"tomorrow never will be like today........"
	
										//"Go and try to hack me you are a loooooooser anyway huh *_*........"



#include <iostream>
#include<string>
#include<vector>
#include<string>
#include<map>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include<cmath>
#include<algorithm>
#include<functional>
#include<set>
#include<stack>
#include<queue>
#include<iomanip>
#include<math.h>
//#include<Bits.h>


#define loop(n) for(int i=0;i<n;i++)
#define cinarr(arr,n) for(int i=0;i<n;i++){cin>>arr[i];}
#define PII pair<int , int>
#define PLL pair<long long,long long>
#define PIS pair<int , string>
#define pb(a) push_back(a)
#define veci vector<int>
#define vecl vector<long long>
#define vecs vector<string>
#define sz(s) int(s.size())
#define p(a) push(a)
#define mkp(a,b) make_pair(a,b)
#define mem2(dp,s1,s2) for(int i = 0 ; i< s1 ; ++i) for(int j = 0 ; j<s2 ; ++j) dp[i][j] = -1;
#define mem3(dp,s1,s2,s3) for(int i = 0 ; i<s1 ; ++i) for(int j = 0 ; j<s2 ; ++j) for(int k = 0 ; k< s3 ; ++k) dp[i][j][k] = -1;
#define fastIO ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

const int MX = 2750131+1;

using namespace std;

typedef long long ll;
typedef string str;
typedef double db;
typedef float fl;
typedef int i;
/*

int lst[MX];
int primeIndex[MX];



//if prime lst[i] = i , else lst[i] = greatest divisor.


void sieve()
{

	loop(MX) lst[i] = i;
	for (int i = 2; i < MX; i++)
	{
		if (lst[i] != i)
		{
			// i is the smallest divisor of lst[i]
			lst[i] = i / lst[i]; //gratest divisor.
		}
		else
		{
			for (ll np = i * 1ll * i; np < MX; np += i)
			{
				lst[np] = min(lst[np], i);
			}
		}
	}

	int ind = 1;
	for (int i = 2; i < MX; i++)
	{
		if (lst[i] == i)
			primeIndex[i] = ind++;
	}


}


int find(int i)
{
	if (parent[i] == 0)
		return i;
	return parent[i] = find(parent[i]); // dp memorizing
}

bool Union(int a, int b)
{
	int x = find(a);
	int y = find(b);
	if (x == y)
		return true;
	parent[x] = y;
	return false;
}


bool compare(char p1, char p2)
{
	return p1 > p2;
}

ll gcd(ll a, ll b)
{
	if (b == 0)
		return a;
	return gcd(b, a%b);
}


*/
/*
ll OO = 1e9;
int dis[100010];
bool ch[100010];
int n, c, m;
vector< vector<int> > gr;


void dikstra(int src = 1)
{
	priority_queue< pair<int,int>, vector<pair<int,int>> , greater<pair<int,int>> > pq;
	
	pq.p(mkp((int)ch[src], src));
	while (!pq.empty())
	{
		int u = pq.top().second;
		ll w = pq.top().first;
		pq.pop();
		if(w < dis[u])
			dis[u] = w;
		for(auto x : gr[u])
		{
			if (w + (int) ch[x] < dis[x])
				pq.p(mkp(w + (int) ch[x] , x));
		}
	}
}

ll power(ll x, ll y)
{
	ll res = 1;      // Initialize result

	x = x % MOD;  // Update x if it is more than or

	while (y > 0)
	{
		// If y is odd, multiply x with result
		if (y & 1)
			res = (res*x) % MOD;

		// y must be even now
		y = y >> 1; // y = y/2
		x = (x*x) % MOD;
	}
	return res;
}



int arr[100000];
int seg[303000];

void build_SegTree(int l , int r , int pos) // o( n )
{
	if (l == r) { seg[pos] = arr[l]; return; }
	int mid = l + (r - l) / 2;
	build_SegTree(l, mid, 2 * pos + 1);
	build_SegTree(mid+1, r , 2 * pos + 2);
	seg[pos] = (seg[2 * pos + 1] + seg[2 * pos + 2]);
}

int Query(int ql ,int qh ,int l , int r , int pos ) //o( logn )
{
	if (ql <= l && qh >= r) // total overlap
		return seg[pos];
	if (ql > r || qh < l) // no overlap
		return 0;
	int mid = l + (r - l) / 2;
	return  (Query(ql, qh, l, mid, 2 * pos + 1) + Query(ql, qh, mid + 1, r, 2 * pos + 2));
}
*/
const int mx = (int)1e5 + 2;
int memo[mx][4];
vector<vector<int>> v(3);
int n,k;
ll OO = (ll)1e18;
int maxHapp(int i , int t)
{
	if (i >= n)
		return 0;
	int &ret = memo[i][t];
	if (ret != -1)
		return memo[i][t];
	ret = 0;
	for(int j = 0 ; j < 3 ; ++j)
	{
		if (j != t)
			ret = max(ret, maxHapp(i + 1, j) + v[j][i]);
	}
	return ret;
}


int main()
{
	fastIO;
	mem2(memo, mx, 4);
	cin >> n;
	loop(n)
	{
		int a, b, c; cin >> a >> b >> c;
		v[0].pb(a); v[1].pb(b); v[2].pb(c);
	}
	cout << maxHapp(0, 3)<<endl;
	
}



Measured memory_bytes: 11116