#include <bits/stdc++.h>
using namespace std;
unordered_map<long long, long long> m;
long long lca(long long u, long long v) {
  long long ans = 0;
  while (u != v) {
    if (v > u) {
      ans += m[v];
      v /= 2;
    } else {
      ans += m[u];
      u /= 2;
    }
  }
  return ans;
}
void lca_update(long long u, long long v, long long w) {
  while (u != v) {
    if (v > u) {
      m[v] += w;
      v /= 2;
    } else {
      m[u] += w;
      u /= 2;
    }
  }
}
signed main() {
  long long q;
  cin >> q;
  while (q--) {
    long long t;
    cin >> t;
    if (t == 1) {
      long long u, v, w;
      cin >> u >> v >> w;
      lca_update(u, v, w);
    } else {
      long long v, u;
      cin >> v >> u;
      cout << lca(u, v) << endl;
    }
  }
}
