#include <stdio.h>
#include <stdlib.h>

void Swap(int *a,int *b){
    int tmp=*a;
    *a=*b;
    *b=tmp;
}

void Sort(int bg[][3],int n){
    int i,j,k,t1,t2,t3;
    for(i=1;i<=n;i++){
        k=i;
        for(j=i+1;j<=n;j++){
            if(bg[j][2]<bg[k][2])
            k=j;
        }
        if(k!=i){
            Swap(&bg[i][0], &bg[k][0]);
            Swap(&bg[i][1], &bg[k][1]);
            Swap(&bg[i][2], &bg[k][2]);
        }
    }
}
void Print(int *dp[],int n,int mt){
    int i=0,j=0;
    printf("dp is:\n");
    for(;i<=n;i++){
        for(j=0;j<=mt;j++)
            printf("%d ",dp[i][j]);
        printf("\n");
    }
}
int main() {
    int n,i,j,bg[31][3],mt;
    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to
        if(n<0)
        break;
        mt=0;
        for(i=1;i<=n;i++){
            scanf("%d%d%d",&bg[i][0],&bg[i][1],&bg[i][2]);
            if(bg[i][2]>mt)
            mt=bg[i][2];//最晚离场的发起人的离场时间
        }
        Sort(bg, n);
        int **dp=(int **)calloc(n+1,sizeof(int*));
        for (i=0; i<=n; i++) {
            dp[i]=(int *)calloc(mt+1,sizeof(int));
        }
        for(i=1;i<=n;i++){
            for(j=1;j<=mt;j++){
                if(j>bg[i][2]){
                    dp[i][j]=dp[i][j-1];
                }
                else if(bg[i][1]<=j){
                    if(dp[i-1][j-bg[i][1]]+bg[i][0]>dp[i-1][j])
                    dp[i][j]=dp[i-1][j-bg[i][1]]+bg[i][0];
                    else
                     dp[i][j]=dp[i-1][j];
                }
                else {
                    dp[i][j]=dp[i-1][j];
                }
            }
        }
        //Print(dp,n,mt);
        printf("%d\n", dp[n][mt]);
        for (i=0; i<=n; i++) {
            free(dp[i]);
        }
        free(dp);
    }
    return 0;
}