#include <bits/stdc++.h>
using namespace std;
map<pair<long long, long long>, long long> m;
void update(long long u, long long v, long long w) {
  while (u != v) {
    if (u > v) {
      m[make_pair(u, u / 2)] += w;
      u /= 2;
    } else {
      m[make_pair(v, v / 2)] += w;
      v /= 2;
    }
  }
}
long long query(long long u, long long v) {
  long long ans = 0;
  while (u != v) {
    if (u > v) {
      ans += m[make_pair(u, u / 2)];
      u /= 2;
    } else {
      ans += m[make_pair(v, v / 2)];
      v /= 2;
    }
  }
  return ans;
}
int main(int argc, char const *argv[]) {
  int q;
  cin >> q;
  while (q--) {
    long long t, u, v, w;
    cin >> t >> u >> v;
    if (t == 1) {
      cin >> w;
      update(u, v, w);
    } else {
      cout << query(u, v) << endl;
    }
  }
  return 0;
}
