func_code_string: #include <bits/stdc++.h>   using namespace std;   namespace io {   const int L = (1 << 20) + 1;   char buf[L], *S, *T, c;   char getchar() {     if (__builtin_expect(S == T, 0)) {       T = (S = buf) + fread(buf, 1, L, stdin);       return (S == T ? EOF : *S++);     }     return *S++;   }   int inp() {     int x = 0, f = 1;     char ch;     for (ch = getchar(); !isdigit(ch); ch = getchar())       if (ch ==  - ) f = -1;     for (; isdigit(ch); x = x * 10 + ch -  0 , ch = getchar())       ;     return x * f;   }   unsigned inpu() {     unsigned x = 0;     char ch;     for (ch = getchar(); !isdigit(ch); ch = getchar())       ;     for (; isdigit(ch); x = x * 10 + ch -  0 , ch = getchar())       ;     return x;   }   long long inp_ll() {     long long x = 0;     int f = 1;     char ch;     for (ch = getchar(); !isdigit(ch); ch = getchar())       if (ch ==  - ) f = -1;     for (; isdigit(ch); x = x * 10 + ch -  0 , ch = getchar())       ;     return x * f;   }   char B[25], *outs = B + 20, *outr = B + 20;   template <class T>   inline void print(register T a, register char x = 0) {     if (x) *--outs = x, x = 0;     if (!a)       *--outs =  0 ;     else       while (a) *--outs = (a % 10) + 48, a /= 10;     if (x) *--outs = x;     fwrite(outs, outr - outs, 1, stdout);     outs = outr;   }   };  // namespace io   using io ::inp;   using io ::inp_ll;   using io ::inpu;   using io ::print;   using i32 = int;   using i64 = long long;   using u8 = unsigned char;   using u32 = unsigned;   using u64 = unsigned long long;   using f64 = double;   using f80 = long double;   long long power(long long a, long long b, long long p) {     if (!b) return 1;     long long t = power(a, b / 2, p);     t = t * t % p;     if (b & 1) t = t * a % p;     return t;   }   template <class T>   inline void freshmin(T &a, const T &b) {     if (a > b) a = b;   }   template <class T>   inline void freshmax(T &a, const T &b) {     if (a < b) a = b;   }   const int MAXN = 510;   const int MAXP = 10000000;   const u64 MOD = 1000000007;   const f80 MI = f80(1) / MOD;   const long long INF = 10000000000000000LL;   const long long inf = 5000000000000LL;   int n;   struct node {     long long a, b, k;     void init() { scanf( %lld%lld%lld , &a, &b, &k); }     bool operator<(const node &A) const { return b > A.b; }   } p[MAXN];   long long F[MAXN][MAXN];   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; ++i) p[i].init();     sort(p + 1, p + n + 1);     for (int i = 1; i <= n; ++i)       for (int j = 0; j <= i; ++j) {         F[i][j] = F[i - 1][j] + max(p[i].a - p[i].b * p[i].k, 0LL);         if (j) freshmax(F[i][j], F[i - 1][j - 1] + p[i].a - p[i].b * (j - 1));       }     cout << *max_element(F[n], F[n] + n + 1) << endl;     return 0;   }   