#include <bits/stdc++.h>
using namespace std;
template <class S, class T>
ostream& operator<<(ostream& o, const pair<S, T>& p) {
  return o << "(" << p.first << "," << p.second << ")";
}
template <class T>
ostream& operator<<(ostream& o, const vector<T>& vc) {
  o << "sz = " << vc.size() << endl << "[";
  for (const T& v : vc) o << v << ",";
  o << "]";
  return o;
}
template <unsigned int mod_>
struct ModInt {
  using uint = unsigned int;
  using ll = long long;
  using ull = unsigned long long;
  constexpr static uint mod = mod_;
  uint v;
  ModInt() : v(0) {}
  ModInt(ll v) : v(normS(v % mod + mod)) {}
  explicit operator bool() const { return v != 0; }
  static uint normS(const uint& x) { return (x < mod) ? x : x - mod; }
  static ModInt make(const uint& x) {
    ModInt m;
    m.v = x;
    return m;
  }
  ModInt operator+(const ModInt& b) const { return make(normS(v + b.v)); }
  ModInt operator-(const ModInt& b) const { return make(normS(v + mod - b.v)); }
  ModInt operator-() const { return make(normS(mod - v)); }
  ModInt operator*(const ModInt& b) const { return make((ull)v * b.v % mod); }
  ModInt operator/(const ModInt& b) const { return *this * b.inv(); }
  ModInt& operator+=(const ModInt& b) { return *this = *this + b; }
  ModInt& operator-=(const ModInt& b) { return *this = *this - b; }
  ModInt& operator*=(const ModInt& b) { return *this = *this * b; }
  ModInt& operator/=(const ModInt& b) { return *this = *this / b; }
  ll extgcd(ll a, ll b, ll& x, ll& y) const {
    ll u[] = {a, 1, 0}, v[] = {b, 0, 1};
    while (*v) {
      ll t = *u / *v;
      for (int i = 0; i < (int)(3); i++) swap(u[i] -= t * v[i], v[i]);
    }
    if (u[0] < 0)
      for (int i = 0; i < (int)(3); i++) u[i] = -u[i];
    x = u[1], y = u[2];
    return u[0];
  }
  ModInt inv() const {
    ll x, y;
    extgcd(v, mod, x, y);
    return make(normS(x + mod));
  }
  bool operator==(const ModInt& b) const { return v == b.v; }
  bool operator!=(const ModInt& b) const { return v != b.v; }
  friend istream& operator>>(istream& o, ModInt& x) {
    ll tmp;
    o >> tmp;
    x = ModInt(tmp);
    return o;
  }
  friend ostream& operator<<(ostream& o, const ModInt& x) { return o << x.v; }
};
using mint = ModInt<1000000007>;
const int MN = 100000;
vector<pair<int, int> > G[MN];
mint a[MN], b[MN];
mint ans;
void dfs(int v, int p = -1, int len = 0) {
  int n = G[v].size();
  if (n == 1) {
    a[v] = 0;
    b[v] = 0;
    return;
  }
  for (pair<int, int> e : G[v]) {
    int u = e.first;
    int c = e.second;
    if (u == p) continue;
    dfs(u, v, c);
  }
  mint A = -n, B = 0;
  for (pair<int, int> e : G[v]) {
    int u = e.first;
    int c = e.second;
    if (u == p) continue;
    A += a[u], B += b[u] + c;
  }
  if (p == -1) {
    ans = -B / A;
    return;
  }
  B += len;
  a[v] = -mint(1) / A;
  b[v] = -B / A;
}
int main() {
  int N;
  cin >> N;
  for (int i = 0; i < (int)(N - 1); i++) {
    int x, y, c;
    cin >> x >> y >> c;
    G[x].push_back(pair<int, int>(y, c));
    G[y].push_back(pair<int, int>(x, c));
  }
  dfs(0);
  cout << ans << endl;
}
