#include <bits/stdc++.h>
using namespace std;
int Int() {
  int x;
  scanf("%d", &x);
  return x;
}
long long Long() {
  long long x;
  scanf("%lld", &x);
  return x;
}
void err(istream_iterator<string> it) { cout << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << ' ';
  err(++it, args...);
}
const int N = (int)2e5 + 5;
const int maxN = (int)1e6 + 6;
const int Mod = 998244353;
const int inf = (int)2e9;
const long long Inf = (long long)1e18;
int mul(int a, int b) { return (long long)a * b % Mod; }
int add(int a, int b) {
  a += b;
  if (a >= Mod) a %= Mod;
  return a;
}
int main() {
  int test = 1, tc = 0;
  while (test--) {
    int n = Int();
    vector<long long> a;
    vector<int> b;
    for (int i = 1; i <= n; ++i) {
      int x = Int();
      a.push_back(1LL * x * i * (n - i + 1));
    }
    for (int i = 1; i <= n; ++i) {
      b.push_back(Int());
    }
    sort(b.begin(), b.end());
    sort(a.begin(), a.end());
    int res = 0;
    for (int i = 0; i < n; ++i) {
      res = add(res, mul(a[i] % Mod, b[n - i - 1]));
    }
    cout << res << '\n';
  }
  return 0;
}
