#include <bits/stdc++.h>
using namespace std;
struct Line {
  long long m, k, p;
  long long eval(long long x) { return m * x + k; }
  Line() {}
  Line(long long _m, long long _k) { m = _m, k = _k; }
};
struct ChtDeque {
  vector<Line> dq;
  int l, r;
  ChtDeque() {}
  ChtDeque(int n) {
    n += 5;
    dq.resize(n + 5);
    l = r = n;
  }
  long long div(long long a, long long b) {
    return a / b - ((a ^ b) < 0 and a % b);
  }
  bool tirar(Line &l1, Line &l2, Line &l3) {
    if (l1.m == l2.m) {
      return l1.k >= l2.k;
    }
    return l2.p <= div(l1.k - l2.k, l2.m - l1.m);
  }
  void add(long long m, long long k) {
    Line line(m, k);
    while (r - l >= 2) {
      if (tirar(line, dq[l], dq[l + 1]))
        l++;
      else
        break;
    }
    if (l < r and dq[l].m == m) {
      if (k > dq[l].k) {
        dq[l] = line;
      }
    } else
      dq[--l] = line;
    if (l + 1 == r)
      dq[l].p = LLONG_MAX;
    else
      dq[l].p = div(dq[l].k - dq[l + 1].k, dq[l + 1].m - dq[l].m);
  }
  long long query(long long x) {
    assert(r > l);
    while (r - l >= 2) {
      if (dq[r - 2].eval(x) >= dq[r - 1].eval(x)) {
        r--;
        dq[r - 1].p = LLONG_MAX;
      } else
        break;
    }
    return dq[r - 1].eval(x);
  }
};
int main() {
  long long n;
  cin >> n;
  vector<tuple<long long, long long, long long>> v;
  for (int i = 0; i < n; i++) {
    long long x, y, z;
    scanf("%lld%lld%lld", &x, &y, &z);
    v.emplace_back(x, y, z);
  }
  sort((v).begin(), (v).end());
  ChtDeque cht(n);
  long long ans = 0;
  cht.add(0, 0);
  for (auto &tup : v) {
    long long x, y, a;
    tie(x, y, a) = tup;
    long long dp = cht.query(y) + x * y - a;
    ans = max(ans, dp);
    cht.add(-x, dp);
  }
  cout << ans << endl;
}
