#include <iostream>
#include <algorithm>
#include <vector>

struct range {
  int from, to;
  double w;
};
bool operator<(range const& l, range const& r) { return l.to < r.to; }

struct until_now {
  until_now(int pos, double w) : pos(pos), w(w) {}
  int pos;
  double w;
};
bool operator<(until_now const& l, int pos) { return l.pos > pos; }

int main()
{
  std::vector<range> ranges;
  for (range r; std::cin >> r.from >> r.to >> r.w;)
    ranges.push_back(r);
  std::sort(ranges.begin(), ranges.end());
  
  std::vector<until_now> dp; dp.push_back(until_now(-1, 0));
  for (std::vector<range>::const_iterator it=ranges.begin(); it!=ranges.end(); ++it) {
    double w = std::max(dp.back().w,
                        std::lower_bound(dp.rbegin(), dp.rend(), it->from)->w + it->w);
    if (dp.back().pos == it->to) dp.back().w = std::max(dp.back().w, w);
    else dp.push_back(until_now(it->to, w));
  }
  std::cout << dp.back().w << '\n';
}
