//INOI PRACTICE
#include <iostream>
using namespace std;
unsigned long npeople;
//return the UNBURNT i for which sum time is minimum
unsigned long computemaxbursttime(unsigned long sumtime[], unsigned long burnt[], unsigned long coboltime[]);
int main()
{
cin>>npeople;
unsigned long *coboltime = new unsigned long [npeople+1];
unsigned long *vaulttime = new unsigned long [npeople+1];
unsigned long *eatingtime = new unsigned long [npeople+1];
unsigned long *sumtime = new unsigned long [npeople+1];
unsigned long *burnt = new unsigned long[npeople+1];
unsigned long additionaltime = 0;
unsigned long minrequiredtime = 0;
unsigned long i;
for(i = 1; i<=npeople; i++)
{
cin>>coboltime[i]>>vaulttime[i]>>eatingtime[i];
sumtime[i] = vaulttime[i] + eatingtime[i];
burnt[i] = 0;
}
i = computemaxbursttime(sumtime, burnt, coboltime);
while(i)
{
burnt[i] = 1;
minrequiredtime = sumtime[i] + additionaltime + coboltime[i];
additionaltime += coboltime[i];
i = computemaxbursttime(sumtime,burnt,coboltime);
}
cout<<minrequiredtime;
return 0;
}
unsigned long computemaxbursttime(unsigned long sumtime[], unsigned long burnt[], unsigned long coboltime[])
{
unsigned long pos = 0;
unsigned long maxburst = 0;
for(unsigned long i = 1; i<=npeople; i++)
{
if(!burnt[i] && sumtime[i] >= maxburst)
{
if(sumtime[i]>maxburst)
pos = i;
else
{
if(coboltime[i]<coboltime[pos])
pos = i;
}
}
}
return pos;
}