//準確的說,這是一道加強的0-1揹包問題
//這到題多了個上限和下限
//把離開時間當作重量,快樂度當作價值,所需時間當作條件
//l爲下限,t爲上限
//東西有先後之分,所以先排序
//狀態轉移方程
//f[i][j]=max{ f[i-1][j-bg[i].l]+bg[i].h , f[i-1][j] | j>=bg[i].l,j<=bg[i].t }
#include<stdio.h>
struct node
{
int h,l,t;
};
node bg[31],temp;
int f[31][1000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF && n>=0)
{
int i,j,k;
for(i=1;i<=n;++i)
scanf("%d%d%d",&bg[i].h,&bg[i].l,&bg[i].t);
for(i=1;i<n;i++){
k=i;
for(j=i+1;j<=n;j++){
if(bg[j].t<bg[k].t){
k=j;
}
}
if(k!=i){
temp=bg[i];bg[i]=bg[k];bg[k]=temp;
}
} //排序
for(i=0;i<=n;++i)
f[i][0]=0;
for(i=0;i<=bg[n].t;++i)
f[0][i]=0;
for(i=1;i<=n;++i) //dp
for(j=1;j<=bg[n].t;++j)
if(j>=bg[i].l&&j<=bg[i].t&&f[i-1][j-bg[i].l]+bg[i].h>f[i-1][j])
f[i][j]=f[i-1][j-bg[i].l]+bg[i].h;
else
f[i][j]=f[i-1][j];
int ans=f[n][1];
for(i=2;i<=bg[n].t;++i)
if(f[n][i]>ans)
ans=f[n][i];
printf("%d\n",ans);
}
return 0;
}