Haskell, 2604525637 (= 222+25823268 + 25369) 26045 (= 222+25823)
r 0="VVX" r n=s(zip[1000,500,100,50,10,5]"MDCLXV")n ξ ξ='ξ' s[]q f |q<0=s[](5-q)f++r 0f++"V" |q<1="" |r<-q-1='I':s[]r f s ω@((v,a):l)q f |q>=v,f/=a=a:s ω(q-v)ξ |f==a,γ<-'I':a:s l(q-v+1)ξ,η γ<η(s l q ξ)=γ |f==ξ,γ<-s ω(v-q)a++[a],η γ<η(s l q ξ)=γ |True=s l q ξ η=length to be used as e.g.
GHCi> r 7 "VII" GHCi> r 39 "XIL" GHCi> r (-39) "ICXLC" -- "LLXILC" in my original version GHCi> r 1983 "MXVIIM" GHCi> r 259876 "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCXXIVM" You can evaluate the length sum with the straightforward
GHCi> sum . map(length.r) $ [-1000..3000] 2582325369 Which takes butsomething in the order of a few secondsminute.