diff --git a/submissions/Codeforces/1876B.cpp b/submissions/Codeforces/1876B.cpp
new file mode 100644
index 00000000..a2dd13b5
--- /dev/null
+++ b/submissions/Codeforces/1876B.cpp
@@ -0,0 +1,106 @@
+#include <bits/stdc++.h>
+
+#include <functional>
+using namespace std;
+#ifdef LOCAL
+#include "debug.cpp"
+#else
+#define dbg(...) 42
+#endif
+#define endl '\n'
+#define fastio                      \
+  ios_base::sync_with_stdio(false); \
+  cin.tie(0);                       \
+  cout.tie(0);
+#define len(__x) (int)__x.size()
+using ll = long long;
+using ull = unsigned long long;
+using ld = long double;
+using vll = vector<ll>;
+using pll = pair<ll, ll>;
+using vll2d = vector<vll>;
+using vi = vector<int>;
+using vi2d = vector<vi>;
+using pii = pair<int, int>;
+using vii = vector<pii>;
+using vc = vector<char>;
+#define all(a) a.begin(), a.end()
+#define pb(___x) push_back(___x)
+#define mp(___a, ___b) make_pair(___a, ___b)
+#define eb(___x) emplace_back(___x)
+int lg2(ll x) {
+  return __builtin_clzll(1) - __builtin_clzll(x);
+}
+
+// vector<string> dir({"LU", "U", "RU", "R", "RD", "D",
+// "LD", "L"}); int dx[] = {-1, -1, -1, 0, 1, 1, 1, 0}; int
+// dy[] = {-1, 0, 1, 1, 1, 0, -1, -1};
+vector<string> dir({"U", "R", "D", "L"});
+int dx[] = {-1, 0, 1, 0};
+int dy[] = {0, 1, 0, -1};
+
+const ll oo = 1e18;
+int T(1);
+const int MAXN(1'000'000);
+const ll MOD(998244353);
+
+set<int> CU;
+map<int, vi> appears;
+vector<pair<int, vi>> appears2;
+ll p2s[MAXN + 1];
+int N;
+
+auto run() {
+  cin >> N;
+
+  p2s[0] = 1;
+  for (int i = 1; i <= N; i++) {
+    CU.emplace(i);
+    p2s[i] = (p2s[i - 1] << 1ll) % MOD;
+  }
+
+  for (int i = 1; i <= N; i++) {
+    int x;
+    cin >> x;
+    appears[x].emplace_back(i);
+  }
+
+  for (auto &[v, xs] : appears) {
+    appears2.emplace_back(v, xs);
+  }
+
+  sort(all(appears2), greater<>());
+
+  ll ans = 0;
+  for (auto &[num, pos] : appears2) {
+    set<int> divisors;
+    for (auto p : pos) {
+      for (ll i = 1; i * i <= p; i++) {
+        if (p % i == 0) {
+          if (CU.count(i)) divisors.emplace(i);
+          if (CU.count(p / i)) divisors.emplace(p / i);
+        }
+      }
+    }
+
+    ll a = (p2s[len(divisors)] + MOD - 1) % MOD;
+    ll b = p2s[len(CU) - len(divisors)];
+    ll c = (((a * b) % MOD) * num) % MOD;
+    ans = (ans + c) % MOD;
+    for (auto div : divisors) CU.erase(div);
+  }
+
+  cout << ans << '\n';
+}
+
+int32_t main(void) {
+#ifndef LOCAL
+  fastio;
+#endif
+  // cin >> T;
+
+  for (int i = 1; i <= T; i++) {
+    run();
+  }
+}
+// math, combinatorics, number theory