#include<bits/stdc++.h>
using namespace std;
inline int read(){
int res=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9'){
res=(res<<1)+(res<<3)+(ch^'0');
ch=getchar();
}
return res;
}
int n,ans,top;
struct node{
int t,g,m;
inline bool operator <(const node &o) const{
return t<o.t;
}
}a[20],s[20];
inline int ask(int a,int b,int c){
int delta=b*b-4*a*c;
if(delta<0)
return -1;
return int(floor(-b+sqrt(delta))/(2*a));
}
inline bool check(){
int k=1,p=0;
for(int i=1;i<=top;++i){
int sum=0,t=s[i].t-s[i-1].t;
for(int j=i;j<=top;++j){
sum+=s[j].g;
if(sum>p)
t=min(t,ask(-1,s[j].t-s[i-1].t-k,k*(s[j].t-s[i-1].t)+p-sum));
}
if(t<0)
return 0;
k+=t;
p+=k*(s[i].t-s[i-1].t-t);
p-=s[i].g;
}
return 1;
}
int main(){
n=read();
for(int i=1;i<=n;++i)
a[i]={read(),read(),read()};
stable_sort(a+1,a+n+1);
for(int i=1;i<(1<<n);++i){
int sum=0;
top=0;
for(int j=1;j<=n;++j)
if(i&(1<<j-1))
s[++top]=a[j],sum+=a[j].m;
if(check())
ans=max(ans,sum);
}
printf("%d\n",ans);
return 0;
}