#include <bits/stdc++.h>
using namespace std;
using LL = long long;
constexpr int N = 3e5 + 5;
int n;
int w[N];
vector<pair<int, int>> E[N];
LL res;
LL val[N];
void dfs(int root, int prt = -1) {
  val[root] = w[root];
  vector<LL> dat;
  for (const auto& p : E[root]) {
    if (p.first == prt) continue;
    dfs(p.first, root);
    dat.push_back(val[p.first] - p.second);
  }
  sort(dat.rbegin(), dat.rend());
  if ((int)dat.size() >= 2) {
    res = max(res, dat[0] + val[root] + dat[1]);
  }
  if ((int)dat.size() >= 1) {
    res = max(res, dat[0] + val[root]);
    val[root] = max(val[root], val[root] + dat[0]);
  }
  res = max(res, val[root]);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> w[i];
  for (int i = 1; i < n; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    E[a].emplace_back(b, c);
    E[b].emplace_back(a, c);
  }
  dfs(1);
  cout << res << endl;
}
