この手の問題でBigIntを使ってはいけません。Longの範囲で解きましょう。ただ、10桁同士の掛け算を行うとLongの範囲を超える可能性があるので、少し工夫します。ここは5桁ずつに区切って計算します。
val M = 1e5.toLong val N = M * M def pow(n :Int, e :Int) :Long = if(e == 0) 1L else { val m = pow(n, e / 2) val m1 = m % M val m2 = m / M val m_sq = (2 * m2 * m1 * M + m1 * m1) % N if(e % 2 == 1) m_sq * n % N else m_sq } println ((1 to 1000).foldLeft(0L)((s, n) => s + pow(n, n)) % N)