#include <bits/stdc++.h>
using namespace std;
double EPS = 1e-10;
const int MAX_N = 100010;
double EQ(double a, double b) { return abs(a - b) < EPS; }
void fast_stream() { std::ios_base::sync_with_stdio(0); }
class BIT {
 private:
  long long bit[MAX_N];
  int n;

 public:
  BIT() {}
  BIT(int sz) { init(sz); }
  void init(int sz) {
    n = sz;
    memset(bit, 0, sizeof(bit));
  }
  long long sum(int i) {
    long long s = 0;
    while (i > 0) {
      s += bit[i];
      i -= i & -i;
    }
    return s;
  }
  void add(int i, long long x) {
    while (i <= n) {
      bit[i] += x;
      i += i & -i;
    }
  }
};
BIT bit[7][11];
int N, M;
long long as[100010];
int main() {
  fast_stream();
  cin >> N;
  for (int i = 0; i < N; i++) cin >> as[i];
  for (int i = 0; i < 7; i++)
    for (int j = 0; j < 11; j++) bit[i][j].init(N + 20);
  for (int z = 2; z <= 6; z++) {
    for (int i = 0; i < (z - 1) * 2; i++) {
      for (int j = i; j < N; j++) {
        int pos = j - i;
        int pos2 = pos % (2 * (z - 1));
        if (pos2 >= (z - 1)) pos2 = 2 * (z - 1) - pos2;
        bit[z][i].add(pos + 1, as[j] * (pos2 + 1));
      }
    }
  }
  cin >> M;
  for (int i = 0; i < M; i++) {
    int t;
    cin >> t;
    if (t == 1) {
      long long p, v;
      cin >> p >> v;
      p--;
      for (int z = 2; z <= 6; z++) {
        for (int i = 0; i < (z - 1) * 2; i++) {
          if (p - i < 0) break;
          int rp = (p - i);
          int pos2 = rp % (2 * (z - 1));
          if (pos2 >= (z - 1)) pos2 = 2 * (z - 1) - pos2;
          long long sum = bit[z][i].sum(rp + 1) - bit[z][i].sum(rp);
          bit[z][i].add(rp + 1, -sum + v * (pos2 + 1));
        }
      }
    } else {
      int l, r, z;
      cin >> l >> r >> z;
      l--;
      r--;
      int index = l % ((z - 1) * 2);
      int rl = l - index;
      int rr = r - index;
      long long sum = bit[z][index].sum(rr + 1) - bit[z][index].sum(rl);
      cout << sum << endl;
    }
  }
  return 0;
}
