#include <bits/stdc++.h>
using namespace std;
int a[105], b[105];
int q, t;
map<long long, long long> mp;
long long x, y, w, dq;
int main() {
  cin >> q;
  while (q--) {
    cin >> t;
    if (t == 1) {
      cin >> x >> y >> w;
      dq = x;
      a[0] = 0;
      while (dq != 0) {
        ++a[0];
        a[a[0]] = dq % 10;
        dq /= 2;
      }
      dq = y;
      b[0] = 0;
      while (dq != 0) {
        ++b[0];
        b[b[0]] = dq % 10;
        dq /= 2;
      }
      if (a[0] > b[0]) {
        for (int i = 1; i <= a[0] - b[0]; ++i) {
          if (mp.count(x) == 0)
            mp[x] = w;
          else
            mp[x] += w;
          x /= 2;
        }
      } else if (a[0] < b[0]) {
        for (int i = 1; i <= b[0] - a[0]; ++i) {
          if (mp.count(y) == 0)
            mp[y] = w;
          else
            mp[y] += w;
          y /= 2;
        }
      }
      while (x != y) {
        if (mp.count(x) == 0)
          mp[x] = w;
        else
          mp[x] += w;
        if (mp.count(y) == 0)
          mp[y] = w;
        else
          mp[y] += w;
        x /= 2;
        y /= 2;
      }
    } else {
      cin >> x >> y;
      long long ans = 0;
      dq = x;
      a[0] = 0;
      while (dq != 0) {
        ++a[0];
        a[a[0]] = dq % 10;
        dq /= 2;
      }
      dq = y;
      b[0] = 0;
      while (dq != 0) {
        ++b[0];
        b[b[0]] = dq % 10;
        dq /= 2;
      }
      if (a[0] > b[0]) {
        for (int i = 1; i <= a[0] - b[0]; ++i) {
          if (mp.count(x) == 0)
            ans += 0;
          else
            ans += mp[x];
          x /= 2;
        }
      } else if (a[0] < b[0]) {
        for (int i = 1; i <= b[0] - a[0]; ++i) {
          if (mp.count(y) == 0)
            ans += 0;
          else
            ans += mp[y];
          y /= 2;
        }
      }
      while (x != y) {
        if (mp.count(x) == 0)
          ans += 0;
        else
          ans += mp[x];
        if (mp.count(y) == 0)
          ans += 0;
        else
          ans += mp[y];
        x /= 2;
        y /= 2;
      }
      cout << ans << endl;
    }
  }
  return 0;
}
